package com.study.testSpringBoot.util;

import java.util.regex.Pattern;

/**
 * 账户相关属性验证工具
 *
 */
public class RegexUtil {
 
    /**
     * 正则表达式：验证手机号
     */
    public static final String REGEX_MOBILE = "^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$";
    
    /**
     * 正则表达式：验证数字长度为11为
     */
    public static final String REGEX_MOBILE_11NUM = "(^\\d{11}$)";

    /**
     * 正则表达式：验证数字
     */
    public static final String IS_NUM = "^[0-9]*$";

    /**
     * 正则表达式：验证邮箱
     */
    public static final String REGEX_EMAIL = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
 
    /**
     * 正则表达式：验证汉字
     */
    public static final String REGEX_CHINESE = "^[\u4e00-\u9fa5],{0,}$";
 
    /**
     * 正则表达式：验证身份证
     */
    public static final String REGEX_ID_CARD = "(^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2}$)";
 
    /**
     * 正则表达式：验证URL
     */
    public static final String REGEX_URL = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";
 
    /**
     * 正则表达式：验证IP地址
     */
    public static final String REGEX_IP_ADDR = "(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)";
 
    /**
     * 校验手机号
     * 
     * @param mobile
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isMobile(String mobile) {
    	if (mobile == null) return false;
        return Pattern.matches(REGEX_MOBILE, mobile);
    }
    
    /**
     * 校验手机号位数
     * 
     * @param mobile
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isMobile_11num(String mobile) {
    	if (mobile == null) return false;
    	return Pattern.matches(REGEX_MOBILE_11NUM, mobile);
    }

    /**
     * 校验纯数字
     *
     * @param num
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isNum(String num) {
    	if (num == null) return false;
    	return Pattern.matches(IS_NUM, num);
    }

    /**
     * 校验身份证位数
     * 
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isIden_num(String iden) {
    	if (iden == null) return false;
    	int length = iden.trim().length();
    	if (length == 15 || length == 18) return true;
    	return false;
    }
 
    /**
     * 校验邮箱
     * 
     * @param email
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isEmail(String email) {
        return Pattern.matches(REGEX_EMAIL, email);
    }
 
    /**
     * 校验汉字
     * 
     * @param chinese
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isChinese(String chinese) {
        return Pattern.matches(REGEX_CHINESE, chinese);
    }
 
    /**
     * 校验身份证
     * 
     * @param idCard
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isIDCard(String idCard) {
        return Pattern.matches(REGEX_ID_CARD, idCard);
    }
 
    /**
     * 校验URL
     * 
     * @param url
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isUrl(String url) {
        return Pattern.matches(REGEX_URL, url);
    }
 
    /**
     * 校验IP地址
     * 
     * @param ipAddr
     * @return
     */
    public static boolean isIPAddr(String ipAddr) {
        return Pattern.matches(REGEX_IP_ADDR, ipAddr);
    }
}